package LinkedList和HashSet和HashMap.work05;

import set.Str;

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Student {
/**
 * 第5题：用HashSet模拟实现学生信息管理系统中的增删改查
 * 需求描述：
 * 用HashSet模拟实现学生信息管理系统中的增删改查。
 * 往HashSet集合中存入自定义学生对象时，学号和姓名相同视为同一个学生，属于重复元素，不能加入。
 * 所需技能点：
 * 1.Set接口的具体实现类HashSet
 *
 * --------学生管理系统--------
 * 1.增加学生信息
 * 2.根据学号删除学生
 * 3.根据学号修改学生
 * 4.根据姓名模糊查询学生
 * 0.退出系统
 */
private int id;
private String name;
static Set<Student> set = new HashSet<>();
static {
    set.add(new Student(1000,"张三"));
    set.add(new Student(1001,"李四"));
    set.add(new Student(1002,"王五"));
}

    public Student() {
    }

    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static Set<Student> getSet() {
        return set;
    }

    public static void setSet(Set<Student> set) {
        Student.set = set;
    }
    public static Student addStu(int id,String name){
    Student student =new Student(id,name);
    for (Student stu : set){
        if (id == stu.getId() && name.equals(stu.getName())){
            return null;
        }
    }
    set.add(student);
    return student;
    }
    //删除学生
    public static boolean deleteStu(int id){
    for (Student stu : set){
        if (id == stu.getId()){
            set.remove(stu);
            return true;
        }
    }
    return false;
    }
    //修改学生
    public static boolean updateStu(int id, String name){
    for (Student stu : set){
        if (id == stu.getId()){
            stu.setName(name);
            return true;
        }
    }
    return false;
    }
    //查询学生
    public static boolean demandStu(String name){
    for (Student stu : set){
        if (name.equals(stu.getName())){
            return true;
        }
    }
    return false;
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int choose = 0;
        String reply = "";
        do {
            System.out.println("学号\t\t姓名");
            for (Student stu : set){
                System.out.println(stu.getId() + "\t" + stu.getName());
            }
            System.out.println("-----------欢迎登录学生管理系统------------");
            System.out.println("\t1.增加学生信息");
            System.out.println("\t2.根据学号删除学生");
            System.out.println("\t3.根据学号修改学生");
            System.out.println("\t4.根据姓名模糊查询学生");
            System.out.println("\t0.退出系统");
            System.out.println("请选择：");
            choose = input.nextInt();
            switch (choose){
                case 1:
                    System.out.println("请输入增加学生的学号：");
                    int id = input.nextInt();
                    System.out.println("请输入增加学生的姓名：");
                    String name = input.next();
                    Student stu = addStu(id,name);
                    try{
                        if (stu == null){
                            throw  new RuntimeException("学生信息重复，无法添加！");
                        }
                        System.out.println("删除学生成功！");
                    }
                    catch (RuntimeException e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case 2:
                    System.out.print("请输入要删除学生的ID：");
                    id = input.nextInt();
                    boolean flag = deleteStu(id);
                    try{
                        if (!flag){
                            throw new RuntimeException("没有找到该学！");
                        }
                        System.out.println("删除学生成功！");
                    }
                    catch (RuntimeException e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case 3:
                    System.out.println("请输入要修改的学生ID：");
                    id = input.nextInt();
                    System.out.println("请输入要修改的学生姓名：");
                    name = input.next();
                    flag = updateStu(id,name);
                    try{

                        if (!flag){
                            throw new RuntimeException("没有找到该学生！");
                        }
                        System.out.println("修改学生成功！");
                    }
                    catch (RuntimeException e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case 4:
                    System.out.println("请输入您要查找的学生姓名：");
                    name = input.next();
                    flag = demandStu(name);
                    try{
                        if (!flag){
                            throw new RuntimeException("没有找到该学生！");
                        }
                        System.out.println(name + "被找到了");
                    }
                    catch (RuntimeException e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case 0:
                    System.out.println("感谢使用！欢迎下次光临！");
                    System.exit(0);
                    break;
            }
            System.out.println("是否继续操作（Y/N）？");
            reply = input.next();
        }while ("Y".equalsIgnoreCase(reply));
    }
    }

